package com.fastCms.business.frame.utils;

import java.math.BigDecimal;

/**
 * @Description: bigDecimal操作工具类<br>
 * @Project: uark <br>
 * @CreateDate: Created in 2023/06/27 下午5:13 <br>
 * @Author: lsquan
 */
public class BigDecimalUtil {


    public static final int MONEY_POINT = 2; // 货币保留两位小数

    public static final int POINT_FOUR = 4; // 保留四位小数

    public static final int ROUND_TYPE = BigDecimal.ROUND_HALF_UP;//格式化方式:四舍五入 or 直接丢弃

    /**
     * 格式化精度
     *
     * @param b,ponit
     * @param point   小数位数
     * @return double
     */
    public static BigDecimal format(BigDecimal b, int point) {
        return b.setScale(point, ROUND_TYPE);
    }

    /**
     * BigDecimal 相加
     *
     * @param v1
     * @param v2
     * @return double
     */
    public static BigDecimal add(BigDecimal v1, BigDecimal v2) {
        return v1.add(v2).setScale(MONEY_POINT, ROUND_TYPE);
    }

    /**
     * BigDecimal 相减
     *
     * @param v1
     * @param v2
     * @return double
     */
    public static BigDecimal subtract(BigDecimal v1, BigDecimal v2) {
        return v1.subtract(v2).setScale(MONEY_POINT, ROUND_TYPE);
    }

    /**
     * BigDecimal 相乘
     *
     * @param v1
     * @param v2
     * @return double
     */
    public static BigDecimal multiply(BigDecimal v1, BigDecimal v2) {
        return v1.multiply(v2).setScale(MONEY_POINT, ROUND_TYPE);
    }

    /**
     * BigDecimal 相除
     *
     * @param v1
     * @param v2
     * @return double
     */
    public static BigDecimal divide(BigDecimal v1, BigDecimal v2) {
        return v1.divide(v2, MONEY_POINT, ROUND_TYPE);
    }

    /**
     * BigDecimal 相除
     *
     * @param v1
     * @param v2
     * @parm point 保留小数点位数
     */
    public static BigDecimal divide(BigDecimal v1, BigDecimal v2, int point) {
        return v1.divide(v2, point, ROUND_TYPE);
    }

    /**
     * 比较大小 小于0：v1 < v2 大于0：v1 > v2 等于0：v1 = v2
     *
     * @param v1
     * @param v2
     * @return
     */
    public static int compare(BigDecimal v1, BigDecimal v2) {
        return v1.compareTo(v2);
    }


    public static BigDecimal calculateSmallRate(BigDecimal sourceValue, BigDecimal rate) {
        return sourceValue.add(multiply(sourceValue, rate));
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(add(new BigDecimal(9.99), new BigDecimal(0.99)));
        System.out.println(subtract(new BigDecimal(9.99), new BigDecimal(0.99)));
        System.out.println(multiply(new BigDecimal(9.99), new BigDecimal(0.99)));
        System.out.println(divide(new BigDecimal(9.99), new BigDecimal(0.99)));


        //System.out.println(doubleTrans(10000.0));
    }
}
